module.exports = function(app) {	
	return {
		"get":function(p_fnsuccess,p_fnerror){
			app.models.organizacao.find().exec().then(p_fnsuccess,p_fnerror);
		}
		,"getSimples":function(p_fnsuccess,p_fnerror){
			app.models.organizacao.find({},{"descricao":1}).exec().then(p_fnsuccess,p_fnerror);
		}
		,"insert":function(p_organizacao,p_fnsuccess,p_fnerror) {		
			app.models.organizacao.create(p_organizacao).then(
				function(dta){				
					p_fnsuccess(dta._id);
				}
				,p_fnerror
			);
		}
		,"update":function(p_organizacao,p_fnsuccess,p_fnerror){
			app.models.organizacao.findByIdAndUpdate(p_organizacao._id,p_organizacao).exec().then(
				function(dta){
					p_fnsuccess(true);
				}
				,p_fnerror
			);
		}
		,"delete":function(p_id,p_fnsuccess,p_fnerror) {
			app.models.organizacao.remove({"_id":p_id}).exec().then(
				function(){
					p_fnsuccess(true);
				}
				,p_fnerror
			);
		}
		,"getMembroBySnAtivo":function(p_snAtivo,p_fnsuccess,p_fnerror){
			//{"membros.snAtivo":p_snAtivo}
			app.models.organizacao.find(
				//{"membros.snAtivo":p_snAtivo}

				{"membros": { $elemMatch: { snAtivo: p_snAtivo } } }

				).distinct("membros",function(error, results){
				if(error){
					p_fnerror(error);
				}else{
					console.log(results);
					p_fnsuccess(results);
				};  				
			});
		}
		,"addMembro":function(p_idOrganizacao,p_membro,p_fnsuccess,p_fnerror) {				
			app.models.organizacao.findById(p_idOrganizacao,function(erro,data){
				if(erro){
					p_fnerror(erro);
				}else{
					var newdoc = data.membros.create(p_membro);
					console.log(newdoc);
					data.membros.push(newdoc);				
					data.save(function (err) {
						if(err){
							return p_fnerror(err);
						};
						console.log('the sub-doc was saved2');
						p_fnsuccess(newdoc._id);
					});
									
				};			
			});  
		}
		,"updateMembro":function(p_idOrganizacao,p_membro,p_fnsuccess,p_fnerror) {	
			app.models.organizacao.findOneAndUpdate(
				{ "_id": p_idOrganizacao , "membros._id": p_membro._id }
				,{ "$set":{"membros.$": p_membro}}
				,function(err,doc) {
					if(err){
						p_fnerror(err);
					}else{
						p_fnsuccess(true);						
					}
				}
			);
		}
		,"deleteMembro":function(p_idOrganizacao,p_idMembro,p_fnsuccess,p_fnerror) {						
			app.models.organizacao.findByIdAndUpdate(p_idOrganizacao,{$pull:{"membros":{_id:p_idMembro}}}).then(
				function(dta){		
					p_fnsuccess(true);
				}
				,p_fnerror
			);
		}
	};
};